<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>

<script>


    //最外层是个立即调用函数，要使用圆括号包裹起来，不然报错
    let one = (function () {
        //内层是个构造函数
        function person() {
            this.name = '孙悟空';
            this.age = 623;
            this.run = () => { }
        }
        //保存实例对象
        let obj = null;
        return {
            //当对象的某个属性的值是个函数时, 可以简写为 属性(){}
            getobj() {
                //返回如果实例对象已经存在就返回实例对象不存在返回新创建的实例对象
                return obj ? obj : (obj = new person());
            }
        }
    })()

    //实例化的对象是同一个对象
    let a = one.getobj();
    let b = one.getobj();
    let c = one.getobj();

    console.log(a,b,c);
    console.log(a==b);

</script>